package com.server.service.impl;

import java.util.Date;
import java.util.UUID;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Service;

import com.server.date.DateType;
import com.server.date.DateUtil;
import com.server.service.IUserManagementService;

@Service("UserManagementService")
public class UserManagementService implements IUserManagementService {
	
	@Autowired
	private JdbcTemplate jdbcTemplate;
	
	
	 /**
	 * 登入记录
	 * @author ServerZhang
	 * @date 2016年7月14日
	 */
	@Override
	public void login(String nickName, String ip, String uuid){
		Date now = new Date();
		String dateStr = DateUtil.getDateStr(now,DateType.YYYY_MM_DD);
		String loginStr = DateUtil.getDateStr(now,DateType.YYYY_MM_DD_HH_mm_ss_SSS);
		String sql = "insert into education.user_visit (uuid,nickname,ip,loginTime,date) values ('%s','%s','%s','%s','%s')";
		String format = String.format(sql, uuid,nickName,ip,loginStr,dateStr);
		jdbcTemplate.execute(format);
		Integer loginCount = this.getLoginCount(nickName);
		if (1 == loginCount) {//记录用户第一次登入时间
			this.recordLoginTime(nickName);
		}
	}
	/**
	 * 登出记录
	 * @author ServerZhang
	 * @date 2016年7月14日
	 */
	@Override
	public void logout(String nickName, String uuid){
		Date now = new Date();
		String dateStr = DateUtil.getDateStr(now,DateType.YYYY_MM_DD_HH_mm_ss_SSS);
		String sql = "Update education.user_visit set logoutTime='%s' where uuid='%s' and logoutTime is null";
		String format = String.format(sql,dateStr,uuid);
		jdbcTemplate.update(format);
		Integer loginCount = this.getLoginCount(nickName);
		if (0 == loginCount) {//记录用户最后一次登出时间
			this.recordLogoutTime(nickName);
		}
	}
	
	 /**
	 * 查询用户多地同时登录在线数
	 * @param nickName
	 * @return
	 * @author ServerZhang
	 * @date 2016年7月14日
	 */
	@Override
	public Integer getLoginCount(String nickName){
		String sql = "Select count(id) from education.user_visit where nickname='%s' and logoutTime is null";
		Integer count = jdbcTemplate.queryForObject(String.format(sql, nickName), Integer.class);
		return count;
	}
	
	 /**
	 * 记录用户第一次登入时间
	 * @param nickName
	 * @author ServerZhang
	 * @date 2016年7月14日
	 */
	private void recordLoginTime(String nickName){
		Date now = new Date();
		String loginStr = DateUtil.getDateStr(now,DateType.YYYY_MM_DD_HH_mm_ss_SSS);
		String sql = "insert into education.login_time (nickname,loginTime) values ('%s','%s')";
		String format = String.format(sql, nickName,loginStr);
		jdbcTemplate.execute(format);
	}
	/**
	 * 记录用户最后一次登出时间
	 * @param nickName
	 * @author ServerZhang
	 * @date 2016年7月14日
	 */
	private void recordLogoutTime(String nickName){
		Date now = new Date();
		String dateStr = DateUtil.getDateStr(now,DateType.YYYY_MM_DD_HH_mm_ss_SSS);
		String sql = "Update education.login_time set logoutTime='%s' where nickname='%s' and logoutTime is null";
		String format = String.format(sql, dateStr,nickName);
		jdbcTemplate.execute(format);
	}
	
	 /**
	 * 检查非正常退出用户，当Session结束时，记录登出数据
	 * @author ServerZhang
	 * @date 2016年7月15日
	 */
	@Override
	public void checkSession(){
		//Long generateSession = SessionUtils.generateSession();
	}
	
}
